package com.hyt.it.ogt.kq.service.gov.service;


import java.io.IOException;
import java.util.List;
import java.util.Map;

import com.hyt.it.ogt.kq.service.gov.model.vo.Tree;
import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.common.config.exception.KqException;
import com.hyt.it.ogt.kq.service.gov.api.cj.model.TaskCandidateAreaVO;
import com.hyt.it.ogt.kq.service.gov.api.ks.model.CandidateAreaVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.CandidateAreaListVO;
import com.hyt.it.ogt.kq.service.model.entity.TaskCandidateArea;

/**
 * <p>
 * 任务考生所属区域表 服务类
 * </p>
 *
 * @author huangyh
 * @since 2021-07-26
 */
public interface ITaskCandidateAreaService extends IService<TaskCandidateArea> {
    /**
     * 获取考生所属区域-省
     * @param taskId
     * @return
     */
    List<TaskCandidateArea> getCandidateAreaProvince(String taskId);

    /**
     * 获取考生所属区域-市
     * @param taskId
     * @param provinceId
     * @return
     */
    List<TaskCandidateArea> getCandidateAreaCity(String taskId,String provinceId);

    /**
     * 获取考生所属区-县区
     * @param taskId
     * @param cityId
     * @return
     */
    List<TaskCandidateArea> getCandidateAreaDistrict(String taskId,String cityId);

    /**
     * 获取考生所属区域
     * @param taskId
     * @return
     */
    Map<String,TaskCandidateArea> getTaskCandidateArea(String taskId);

    /**
     * 根据考试任务ID获取区域列表
     * @param taskId
     * @return
     */
    List<TaskCandidateArea> getTaskCandidateAreaDistrictList(String taskId);

    /**
     * 初始化考试任务下的考生区域信息
     * @param taskId
     * @param officeId
     */
    void initTaskCandidateArea(String taskId, String officeId);

    /**
     * 通过考试任务id获取考生区域数据
     * @param taskId 考试任务id
     * @return 考生区域数据
     */
    List<TaskCandidateArea> listByTaskId(String taskId);

    /**
     * 根据考试任务id删除考生区域数据
     * @param taskId 考试任务id
     */
    void deleteByTaskId(String taskId);

    /**
     * 初始化虚拟考生区域数据
     * @param taskId 考试任务id
     */
    void initVirtualTaskCandidateArea(String taskId);

    /**
     * 通过考试任务id、批次id、准考证号获取考生区域信息
     *
     * @param taskId          考试任务id
     * @param timeId          批次id
     * @param admissionNumber 准考证号
     * @return 考生区域信息VO
     */
    CandidateAreaVO getVOByTaskId(String taskId, String timeId, String admissionNumber);

    /**
     * 获取任务下的考生省份信息
     * @param taskId 考试任务id
     * @return 任务下的考生省份信息
     */
    List<TaskCandidateAreaVO> getProvinceByTaskId(String taskId);

    /**
     * 获取任务下指定省份下的市信息
     * @param taskId 考试任务id
     * @param province 省份编号
     * @return 任务下指定省份下的市信息
     */
    List<TaskCandidateAreaVO> getCityById(String taskId, String province);

    /**
     * 导入考生区域数据-报名版-按照报名的区域结构导入即可
     * @param file
     * @param taskId
     * @throws KqException
     * @throws IOException
     */
    void importCandidateAreaByBm(MultipartFile file, String taskId) throws KqException, IOException;

    /**
     * 获取考生区域下拉列表
     * @param taskId 考试任务id
     * @param type 区域类型
     * @param parentId 父级区域
     * @return 考生区域下拉列表
     */
    List<CandidateAreaListVO> getAreaList(String taskId, Integer type, String parentId);

    /***
     * 根据taskid和区域ids获取考生区域列表
     * @param taskId  任务id
     * @param areaIds  区域id集合
     * @return
     */
	List<TaskCandidateArea> listByTaskIdAndAreaIds(String taskId, List<String> areaIds);


    /***
     * 根据taskid和区域id获取考生区域列表
     * @param taskId  任务id
     * @param areaIds  区域id集合
     * @return
     */
    TaskCandidateArea listByTaskIdAndAreaId(String taskId, String areaId);

    /**
     * 获取所有区域的列表树
     *
     * @return
     */
    List<Tree> allTree(String taskId, String type);

    String getAreaFullName(String taskId, String area);

    /**
     * 判断考生区域入库是否已经存，存在不入，不存在入
     * @param areas
     * @return
     */
    //Boolean saveAreaWhenIsExists(String taskId,List<TaskCandidateArea> areas);
}
